'use strict';
// 例子：在同一个云函数文件中封装多个方法

const db = uniCloud.database();

exports.main = async (event, context) => {
	console.log('接收到的参数:', event); // 添加日志
	const {
		action,
		postId,
		skipCount = 0,
		limitCount = 20,
		page = 1,
		pageSize = 10,
		type = '',
		is_privacy = false
	} = event;

	switch (action) {
		case 'getAllPosts':
			return await getAllPosts(page, pageSize, type);
		case 'publishPost':
			return await publishPost(event.postData);
		case 'getComment':
			return await getComment(event.postId, event.commentData);
		case 'likePost':
			return await likePost(event.postId);
		default:
			return {
				code: 400,
					message: '未知的action类型'
			};
	}

	// 获取所有文章（分页）
	async function getAllPosts(page, pageSize, type) {
		try {
			const collection = db.collection('articles');

			// 构建查询条件
			let query = collection;
			if (type && type !== '全部') { // 如果type存在且不是"全部"，则添加筛选条件
				query = query.where({
					type: type,
					is_privacy: false // 默认只显示公开的文章
				});
			} else {
				query = query.where({
					is_privacy: false // 默认只显示公开的文章
				});
			}

			// 获取文章列表
			const {
				data
			} = await query
				.orderBy('createTime', 'desc') // 按创建时间倒序
				.skip((page - 1) * pageSize)
				.limit(pageSize)
				.get();



			return {
				code: 200,
				message: '获取成功',
				data: {
					list: articles,
					total: total || 0,
					page,
					pageSize
				}
			};
		} catch (error) {
			console.error('获取文章失败:', error);
			return {
				code: 500,
				message: '获取文章失败',
				error: error.message
			};
		}
	}

	// 插入新的文章记录
	async function publishPost(postData) {
		const collection = db.collection('articles');
		const {
			title,
			content,
			user_id,
			type,
			user_name,
			img_list,
			user_img,
			is_privacy
		} = postData;

		const res = await collection.add({
			title: title,
			content: content,
			user_id: user_id,
			user_name: user_name,
			type: type || '',
			number_likes: '0',
			number_comments: '0',
			user_likes_list: [],
			img_list: img_list,
			user_img: user_img,
			is_privacy: is_privacy === undefined ? false : is_privacy, // 如果未指定，默认为公开
			createTime: Date.now()
		});

		if (res.id) {
			return {
				code: 200,
				message: '发布成功',
				id: res.id
			};
		} else {
			return {
				code: -1,
				message: '发布失败'
			};
		}
	}

	// 实现获取所有评论的逻辑
	async function getComment(postId) {
		if (!postId) {
			return {
				code: -1,
				message: '缺少必要的参数'
			};
		}
		try {
			// 查询指定文章ID的所有评论，按时间戳降序排列
			const comments = await db.collection('comments')
				.where({
					article_id: postId
				})
				.orderBy('timestamp', 'desc') // 按时间戳降序排列
				.get();
			return {
				code: 200,
				message: '查询成功',
				data: comments.data
			};
		} catch (error) {
			console.error(error);
			return {
				code: -1,
				message: '查询失败'
			};
		}
	}

	// 实现评论后，评论数量+1的操作
	async function addCommentNum(postId) {
		const updateResult = await db.collection('articles').where({
			_id: postId // 根据文章ID查找对应的文章记录
		}).update({
			number_comments: _.inc(1) // 使用数据库提供的增量操作符，如MongoDB中的$inc
		});
	}

	// 实现增加文章点赞数的逻辑
	async function likePost(postId) {
		try {
			// 获取文章文档
			const articleRef = db.collection('articles').doc(postId);
			const article = await articleRef.get();

			if (!article.data || article.data.length === 0) {
				return {
					code: -1,
					message: '未找到对应的文章'
				};
			}

			// 检查是否已经点赞
			if (article.data[0].is_like) {
				return {
					code: -1,
					message: '您已经点赞过了'
				};
			}

			// 更新点赞数和 is_like 字段
			const updatedArticle = await articleRef.update({
				number_likes: db.command.inc(1),
				is_like: true // 标记为已点赞
			});

			return {
				code: 200,
				message: '点赞成功',
				data: {
					newLikes: article.data[0].number_likes + 1
				}
			};
		} catch (error) {
			console.error(error);
			return {
				code: -1,
				message: '点赞失败'
			};
		}
	}
};